import type { ClassTypeListKey, ClassTypeListResult } from '@/api/indexTypes';
import type { QueryType } from '..';
import type { MemberRoleEnum } from '@/enums/memberRoleEnum';
import type { FormSchema } from '@/components/Form';

/**
 * 图片裁剪
 */
export type CropImg = {
  /**
   * 图片路径
   */
  imageUrl?: string;

  /**
   * 图片的质量，取值范围为 0 ~ 1，不在范围内时当作1处理
   * 默认值:1
   */
  quality?: number;

  /**
   * 裁剪框宽度，单位为 rpx
   * 默认值 400
   */
  width?: number;

  /**
   * 裁剪框高度
   * 默认值 400
   */
  height?: number;

  /**
   * 裁剪框最小宽度
   * 默认值 200
   */
  minWidth?: number;

  /**
   * 裁剪框最小高度
   * 默认值 200
   */
  minHeight?: number;

  /**
   * 裁剪框最大宽度
   * 默认值 600
   */
  maxWidth?: number;

  /**
   * 裁剪框最大宽度
   * 默认值 600
   */
  maxHeight?: number;

  /**
   * 图片最小缩放比
   * 默认值 0.5
   */
  minRatio?: number;

  /**
   * 图片最大缩放比
   * 默认值 2
   */
  maxRatio?: number;

  /**
   * 旋转按钮每次旋转的角度
   * 默认值 90
   */
  rotateAngle?: number;

  /**
   * 生成图片相对于裁剪框的比例， 比例越高生成图片越清晰
   * 默认值 1
   */
  scaleRatio?: number;

  /**
   * 是否锁定裁剪框宽度
   * 默认值 false
   */
  isLockWidth?: boolean;

  /**
   * 是否锁定裁剪框高度上
   * 默认值 false
   */
  isLockHeight?: boolean;

  /**
   * 是否锁定裁剪框比例
   * 默认值 true
   */
  isLockRatio?: boolean;

  /**
   * 是否禁止缩放
   * 默认值 false
   */
  isDisableScale?: boolean;

  /**
   * 是否禁止旋转
   * 默认值 false
   */
  isDisableRotate?: boolean;

  /**
   * 是否限制移动范围
   * 默认值 true
   */
  isLimitMove?: boolean;

  /**
   * 是否显示选择图片按钮
   * 默认值 true
   */
  isShowPhotoBtn?: boolean;

  /**
   * 是否显示转按钮
   * 默认值 true
   */
  isShowRotateBtn?: boolean;

  /**
   *  从相册选图
   */
  source_album?: boolean;

  /**
   * 使用相机
   */
  source_camera?: boolean;

  /**
   * 生成图片成功
   */
  onSuccess?: (res: { width: number; height: number; url: string }) => void;

  /**
   * 生成图片失败
   */
  onFail?: (error: string) => void;

  /**
   * 图片加载完成
   */
  onReady?: () => void;

  /**
   * cancel
   */
  onCancel?: () => void;
};

/**
 * 公共富文本解析页面
 */
export type RichDetails = {
  pageTitle?: string;
  content?: string;
  id?: string | number;
  title?: string;
  refresh?: () => void;
};

/** 公共的webview */
export type Webview = {
  url: string;
  title?: string;
  shareImg?: string;
  unLoadCallback?: () => void;
};

/** 公共的h5富文本编辑器 */
export type H5RichTextEditor = {
  id?: number | string
  text?: string
  callback: (content: string, customPageId: string) => void
}

/** 官网扫码二维码 登录 */
export type WebsiteScanCode = {
  scene: string;
};

/** 分类选择 */
export interface TypeSelectedItem {
  key: ClassTypeListKey;
  id: number | string;
  name: string
}
export type TypeSelection = {
  /** 本地数据 */
  localData?: ClassTypeListResult[];
  /** getClassTypeList key列表 */
  keys?: ClassTypeListKey[];
  /** 已选择的项 */
  selected: TypeSelectedItem[];
  /** 是否单选 */
  isRadio?: boolean;
  /** 返回回调 */
  success?: (selected: TypeSelectedItem[]) => void;
};

/**
 * 公共搜索页面
 */
export type SearchPage = {
  placeholder: string
  success: (val: string) => void
}

/**
 * 插入公众号
 */
export type InsertMpTutorials = {
  query: QueryType
}

/** 选择会员 */
export type PublicSelectUserList = {
  /**
   * 单选 / 多选
   * default => checkbox
  */
  type?: 'radio' | 'checkbox'
  /** 会员列表 or 用户列表 */
  dataSource: 'memberList' | 'userList',
  /** 会员列表中查询指定等级的成员 */
  initRoleIds?: MemberRoleEnum[]
  /** 已选列表 */
  selectedList: (string | number)[]
  success: (selectedList: PublicSelectUserList['selectedList']) => void
}

export type CreateFormItem = {
  item?: FormSchema;
  success: (data: FormSchema) => void;
};